如果进行团队协作, 少不了使用Github对代码进行版本控制以及整合.
那么在使用GitHub的过程中, 如果遇到了合并冲突,应该如何解决呢?
如何让本地的代码与远程的最新代码同步呢?
会遇到很多问题, 下面以四个场景, 从简单到复杂, 层层递进, 来分析Github多人协作的工作流程
场景一:
- A创建Repo, B为合作者
- B把项目clone回去
- A修改代码, 然后推送代码 commit&git push
- B拉代码下来 git pull
- B修改代码, 然后推代码上去 commit&git push
- A 拉代码下来git pull
情景二:
- A修改代码, 然后推代码上去 commit&git push
- B修改代码, 然后推代码上去 commit&git push
报错: 碰到![rejected]master -> master(fetch first)
失败信息 - B要先拉代码下来git pull进行代码自动合并
- B再次git push
- A拉代码下来git pull
情景三:
- A修改代码, 然后推代码上去 commit&git push
- B修改代码, 然后推代码上去 commit&git push
报错: 碰到![rejected]master -> master(fetch first)
失败信息 B要先拉代码下来git pull进行代码尝试自动合并(git pull时会报错:
Automatic merge failed; fix conflicts and then commit the result
, 此时远端的代码已经来下来了,只是自动合并失败,所以只需要手动合并即可)
报错: 自动合并失败(Automatic merge failed), 因为两个人修改的是同一份文件,需要解决手动冲突, 然后git commit手动解决冲突: git status, 查看
both modified
,找到冲突的文件,打开并一一处理. 并去掉git添加的特殊标记符B再次git push
- A拉代码下来git pull
进阶用法(branch):
做新功能都先从master分支出来,创建一个新分支 feature branch
- 初创分支 git checkout -b branchname
- 第一次推 git push -u origin branchname
第一次拉远端分支 git checkout –track origin/branchname
- git checkout master
- git merge branchname
- git push
注意: git push与git pull时要注意操作命令是所在的分支
情景四:
- B开一个分支branch
- B修改代码, 然后推代码上去 commit & git push(第一次push: git push -u origin branchname; 如果不是第一次push,只需执行git push即可)
- B在github上Pull Request
- A收到通知进行查看代码,如果没问题,则合并进master(有时候,可能在github上无法直接merge,所以需要从远端拉到本地,解决冲突直接再merge)(如果是第一次拉远端分支:首先git pull先把代码拉到本地; 然后检出分支git checkout –track origin/branchname)
- B回到master进行git pull